package wangwenjun.phase2.concurrencypattern.eventbus.framework;

/**
 * @author ChangLiang
 * @date 2020/6/18
 */
public interface EventBus {

    /**
     * EventBus 接口定义了EventBus 的所有使用方法
     */

    /**
     * 将某个对象注册到Bus 上， 从此之后该类就成为Subscriber 了
     * note: 注册对象给Event Bus的时候需要指定接收消息时的回调方法，这里采用注解的方式进行event回调
     * @param subscriber
     */
    void register(Object subscriber);

    /**
     * 将某个对象从Bus 上取消注册，取消注册之后就不会再接收到来自Bus 的任何消息
     * @param subscriber
     */
    void unRegister(Object subscriber);

    /**
     * 提交Event 到默认的topic
     * @param event
     */
    void post(Object event);

    /**
     * 提交Event 到指定的topic
     * 具体的动作是由 {@link EventDispatcher} 来完成的
     *
     * @param event
     * @param topic
     */
    void post(Object event, String topic);

    /**
     * 关闭该bus
     */
    void close();

    /**
     * 返回Bus 的名称标识
     * @return
     */
    String getEventBusName();
}
